package day19;
//测试volatile是否可以禁止指令重排序
public class Demo2 {
    //先定义几个变量
    static volatile private int a,b,c,d;

    public static void main(String[] args) throws InterruptedException {
        int i=0;
        while(true){
            //统计执行了多少次出现重排序
            i++;
            a=b=c=d=0;
            Thread t1=new Thread(()->{
                a=1;
                c=b;
                //正常来说先执行a=1,再执行c=b;
                //但是重排序后，可能先执行c=b；
                //会导致c=0
                //如果没有重排序
            });
            Thread t2=new Thread(()->{
                b=1;
                d=a;
                //会导致d=0
            });
            t1.start();
            t2.start();

            t1.join();
            t2.join();

            if (c==0&&d==0){
                System.out.println("执行了"+i+"次，出现了指令重排序!");
                break;
            }else{
                System.out.println(i);
            }
        }
    }
}
